/*
 * java -Xmx2g -Xms2g -XX:+AlwaysPreTouch AlwaysPreTouchTest $(($(date +%s)*1000))
 */
public class AlwaysPreTouchTest {

    public static void main(String[] args) throws InterruptedException {
        long cmdTime = Long.parseLong(args[0]);
        long mainStartTime = System.currentTimeMillis();
        System.out.println("Java 进程本身启动的时间: " + (mainStartTime - cmdTime));

        System.out.println("大对象分配前，请执行命令 ps aux | grep java");

        // 模拟一个启动延迟，等待一段时间再分配内存
        Thread.sleep(10000);

        System.out.println("开始分配 1G 大对象");
        long newObjStartTime = System.currentTimeMillis();

        // 分配一些大的内存对象
        int size = 1000 * 1000 * 1000; // 1GB
        byte[] bytes = new byte[size];

        long newObjEndTime = System.currentTimeMillis();
        System.out.println("分配1G大对象耗时: " + (newObjEndTime - newObjStartTime));

        System.out.println("大对象分配后，请执行命令 ps aux | grep java");
        // 休眠一段时间以便我们可以查看内存使用情况
        Thread.sleep(60000);
    }
}